#ifndef CLIENT_H
#define CLIENT_H

#include "include.hpp"

using clientHandler = function<void(int, string)>;

/**
 * @brief client信息维护，收发数据的序列化和反序列化
 *
 */
class Client
{
public:
    Client();
    // 客户功能页面
    void mainMenu(int clientfd);
    // 帮助功能
    void help(int clientfd = 0, string str = "");
    // 聊天功能
    void onechat(int clientfd, string str);
    // 添加好友功能
    void addfriend(int clientfd, string str);
    // 退出功能
    void loginout(int clientfd, string str);
    // 建群功能
    void creategroup(int clientfd, string str);
    // 加群功能
    void addgroup(int clientfd, string str);
    // 群聊功能
    void groupchat(int clientfd, string str);
    // 登录后获取信息并设置
    bool loginResponse(json &js);
    // 获取当前时间
    string getCurrentTime();
    // 展示用户信息
    void showCurrentUserData();

private:
    User user;                                              // 用户信息
    vector<User> friendList;                                // 用户的好友列表信息
    vector<Group> groupList;                                // 用户的群组列表信息
    unordered_map<string, string> commandMap;               // 命令表
    unordered_map<string, clientHandler> commandHandlerMap; // 命令及其对应的处理函数
};

#endif